package main

import (
	"net"
	"net/rpc"
	"net/rpc/jsonrpc"
)

// 常规go rpc测试示例
type HelloService struct {
}

func (s *HelloService) Hello(request string, reply *string) error {
	*reply = "hello " + request
	return nil
}
func main() {
	// 1.实例化一个server
	listener, _ := net.Listen("tcp", ":1234")
	// 2. 注册处理逻辑 handler
	_ = rpc.RegisterName("HelloService", &HelloService{})
	// 3. 启动服务
	// 防止客户端连接一次后就退出 可以用for 死循环实现
	for {
		conn, _ := listener.Accept() // 当一个新的连接进来的时候，套接字传递给rpc
		// rpc.ServeConn(conn) // 默认的序列化
		// 并发实现 go协程处理
		go rpc.ServeCodec(jsonrpc.NewServerCodec(conn)) //采用json序列化解码包
	}

}
